<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <input type="text" id="text">
    <div id="box"></div>
    <script>
        //节流  throttle   [ˈθrɒtl]
        //规定一个单位时间，在这个单位时间内，只能执行一次触发事件的回调，如果在单位事件内触发多次，也只执行一次

        //应用场景
        // 1、DOM元素的拖拽
        // 2、Canvas绘图
        // 3、游戏中的刷新率

        function throttle(callback, delay) {
            var obj;
            var timer = null;
            var fn = function () {
                callback.apply(obj)
            }
            //获取一下当前的时间
            var nowTime = Date.now()  //当前时间的时间戳
            return function () {
                //事件中的this---》指向事件源
                obj = this
                console.log(obj);   //<input type="text" id="text">
                // 获取时间
                var oTime = Date.now()  //
                var time = oTime - nowTime - delay

                if (time >= 0) {
                    nowTime = oTime
                    setTimeout(fn, delay)
                }
            }
        }
        var oText = document.getElementById("text");
        var oBox = document.getElementById("box");
        oText.addEventListener("input", throttle(function () {
            oBox.innerHTML = oText.value
        }, 3000), false)






    </script>
</body>

</html>